package top.luckyluxcis.api;

import lombok.experimental.UtilityClass;
import top.luckyluxcis.RollApi;
import top.luckyluxcis.consts.ImageType;
import top.luckyluxcis.type.Qrcode;
import top.luckyluxcis.util.MapUtil;

import java.io.File;
import java.util.Map;

/**生成单张二维码和带LOGO的二维码
 * @author Zhuang
 * @since 2023/9/21
 */
@SuppressWarnings("unused")
@UtilityClass
public class QrcodeUtil {
    private static final RollApi API = RollApi.getInstance();

    /**
     * <pre>
     * 根据传入的内容生成二维码，可以选择获取二维码下载链接，也可以直接获取图片的Base64字符串自己解析
     * （注：Base64字符串前面默认添加了“data:image/jpg;base64,”，取值的时候请根据需要对这个内容进行处理）。
     * </pre>
     *
     * @param content 生成二维码的内容
     * @param size    生成二维码的大小（不传默认为500）
     * @param type    你希望返回二维码的类型：（0=下载链接 1=base64字符串）
     * @return {@link Qrcode}
     */
    public static Qrcode createSingle(String content, Integer size, ImageType type) {
        Map<String, Object> params = MapUtil.<String, Object>builder()
                .put("content", content)
                .put("size", size)
                .put("type", type.getCode())
                .build();
        return API.get("/qrcode/create/single", params, Qrcode.class);
    }

    /**
     * <pre>
     * 根据传入的内容生成带logo的二维码，可以选择获取二维码下载链接，也可以直接获取图片的Base64字符串自己解析
     * （注：Base64字符串前面默认添加了“data:image/jpg;base64,”，取值的时候请根据需要对这个内容进行处理）。
     * </pre>
     *
     * @param content  生成二维码的内容
     * @param size     生成二维码的大小（不传默认为500）
     * @param type     你希望返回二维码的类型：（0=下载链接 1=base64字符串）
     * @param logoSize logo的大小（不传默认为而二维码大小的1/5）
     * @param logoImg  嵌入在二维码中的logo图片文件
     * @return {@link Qrcode}
     */
    public static Qrcode createLogo(String content, Integer size, ImageType type, Integer logoSize, File logoImg) {
        Map<String, Object> params = MapUtil.<String, Object>builder()
                .put("content", content)
                .put("size", size)
                .put("type", type.getCode())
                .put("logo_size", logoSize)
                .build();
        return API.post("/qrcode/create/logo", params, logoImg, Qrcode.class);
    }

    /**
     * <pre>
     *     根据传入的内容生成二维码，可以选择获取二维码下载链接，也可以直接获取图片的Base64字符串自己解析
     *     （注：Base64字符串前面默认添加了“data:image/jpg;base64,”，取值的时候请根据需要对这个内容进行处理）。
     * </pre>
     *
     * @param content 生成二维码的内容，需要base64
     * @param size    生成二维码的大小（不传默认为500）
     * @param type    你希望返回二维码的类型：（0=下载链接 1=base64字符串）
     * @return {@link Qrcode}
     */
    public static Qrcode createSingleBase64(String content, Integer size, ImageType type) {
        Map<String, Object> params = MapUtil.<String, Object>builder()
                .put("content", content)
                .put("size", size)
                .put("type", type.getCode())
                .build();
        return API.get("/qrcode/create/single/base64", params, Qrcode.class);
    }

    /**
     * <pre>
     * 根据传入的内容生成带logo的二维码，可以选择获取二维码下载链接，也可以直接获取图片的Base64字符串自己解析
     * （注：Base64字符串前面默认添加了“data:image/jpg;base64,”，取值的时候请根据需要对这个内容进行处理）。
     * </pre>
     *
     * @param content  生成二维码的内容，需要base64加密
     * @param size     生成二维码的大小（不传默认为500）
     * @param type     你希望返回二维码的类型：（0=下载链接 1=base64字符串）
     * @param logoSize logo的大小（不传默认为而二维码大小的1/5）
     * @param logoImg  嵌入在二维码中的logo图片文件
     * @return {@link Qrcode}
     */
    public static Qrcode createLogoBase64(String content, Integer size, ImageType type, Integer logoSize, File logoImg) {
        Map<String, Object> params = MapUtil.<String, Object>builder()
                .put("content", content)
                .put("size", size)
                .put("type", type.getCode())
                .put("logo_size", logoSize)
                .build();
        return API.post("/qrcode/create/logo/base64", params, logoImg, Qrcode.class);
    }
}
